package neu.gprs.filter;

import java.util.Map;

import org.apache.struts2.ServletActionContext;

import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.AbstractInterceptor;

public class LogFilter extends AbstractInterceptor {
    /**
     * systemID
     */
    private static final long serialVersionUID = 1L;

    @Override
    public String intercept(ActionInvocation invocation) throws Exception {
        // 取得请求的Action名
        String name = invocation.getInvocationContext().getName();
        if ("initLogin".equals(name) || "Login".equals(name)) {
            // 如果用户想登录，则使之通过
            return invocation.invoke();
        } else {
            // 取得Session。
            ActionContext ac = invocation.getInvocationContext();
            @SuppressWarnings("rawtypes")
            Map session = (Map) ac.get(ServletActionContext.SESSION);
            if (session == null) {
                // 如果Session为空，则让用户登陆。
                return "login";
            } else {
                String userName = (String) session.get("userName");
                if (userName == null) {
                    // Session不为空，但Session中没有用户信息，
                    // 则让用户登陆
                    return "login";
                } else if (!"admin".equals(userName) && !"Record".equals(name)) {
                    return "error";
                } else {
                    // 用户已经登陆，放行~
                    return invocation.invoke();
                }
            }
        }
    }
}
